package com.warren.config;

import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.OutputFile;
import com.baomidou.mybatisplus.generator.config.rules.DateType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;

import java.util.Collections;

/**
 * @version V1.0
 * @Description:
 * @author: warren
 * @date: 2022/8/3$ 16:55$
 */
public class MybatisPlusGenerator {
    public static void main(String[] args) {
        String url = "jdbc:mysql://127.0.0.1:3306/test_db?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC";
        String username = "root";
        String password = "pwd";
        String home = "D:\\nike\\hello-world\\generator";

        FastAutoGenerator.create(url, username, password)
                .globalConfig(builder -> {
                    builder.author("warren") // 设置作者 注释会显示
                            .enableSwagger() // 开启 swagger 模式
                            .fileOverride() // 覆盖已生成文件
                            // 指定时间策略。
                            .dateType(DateType.ONLY_DATE)
                            // 注释时间策略。
                            .commentDate("yyyy-MM-dd")
                            .outputDir(home); // 指定输出目录
                })
                .packageConfig(builder -> {
                    builder.parent("com") // 设置父包名
                            .moduleName("warren") // 设置父包模块名
                            .entity("entity")
                            .service("service")
                            .serviceImpl("service.impl")
                            .mapper("mapper")
                            .controller("controller")
                            .pathInfo(Collections.singletonMap(OutputFile.xml, home + "\\resources\\mapper")); // 设置mapperXml生成路径
                })
                //策略设置
                .strategyConfig(builder ->
                        //数据库表
                        builder.addInclude("t_ar_log_record")
                                .addTablePrefix("t_", "c_") // 设置过滤表前缀
                                //通用查询结果列和通用查询映射结果
                                .mapperBuilder().enableBaseColumnList().enableBaseResultMap()
                                //去掉service接口开头的字母I
                                .serviceBuilder().formatServiceFileName("%sService")
                                //以RESTful风格生成controller
                                .controllerBuilder().enableRestStyle()
                                //数据库字段转实体属性风格--驼峰
                                .entityBuilder().columnNaming(NamingStrategy.underline_to_camel)
                                // 设置过滤表前缀
//                            .addTablePrefix("t_", "c_")
                                //启用lombok注解
                                .enableLombok())
                .templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板，默认的是Velocity引擎模板
                .execute();
    }
}
